Recent developments of Software Defined Networking and Network Function Virtualization technologies have introduced new approaches to deploy advanced services in a variety of network implementations such as data centers, mobile networks, and even enterprise and carrier networks.
One such approach to composing these advanced services is called service chaining. Service chaining is the method of applying a set of services to a packet flow between two endpoints. A specific service such as a firewall or Network Address Translation (NAT), may be provided through a hardware appliance or as an instance of a software application running on a virtual machine (VM).
Network virtualization in data centers and mobile networks has led to an increasing need for dynamic service chains with service instances that are deployed on virtual machines. A service chain is formed by routing the packet flow between the virtual machine of one service instance to the virtual machine of the next instance in the service chain. However, existing service chaining is relatively static and tightly coupled to already deployed network topology and physical resources, which are often difficult and/or costly to change. While network virtualization offers the ability to perform dynamic service chaining, unfortunately, few network equipment manufacturers offer these capabilities and none offer complex service graph branching and re-arrangement.
Moreover, the service chain implementations that are used in practice typically have severe limitations. For example, currently there are no mechanisms adopted within the networking industry capable of performing dynamic forking and re-arrangement of service chains, or modeling of service graphs. Instead, service graphs must be employed to split a traffic flow into multiple branches consisting of finer-grained flows so that specific differentiated services can be later applied to those flows. In addition, there is presently no conventional technique by which multiple streams of traffic can be merged to allow specific services to be applied to an aggregate flow.
Yet another challenge is to ensure that service graphs are acyclic so that there are no loops in the graph that would lead to service interruptions and degradation. Finally, there are no conventional solutions to support asymmetric service graphs, where different service paths are taken for forward and reverse data flow directions to allow different services to be applied to a packet flow in each direction. Likewise, conventional solutions are not capable of congruent forward and reverse direction service paths to support stateful service appliances in which case the forward direction and reverse direction must go through exactly the same service instance path.